package com.android.smsmultibanking.contactpicker;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class ContactPickerActivity extends Activity implements View.OnClickListener, SmsBuilder {

    private EditText textInputNumber;
    private EditText textInputSum;
    private static final int PICK_CONTACT = 3;

    /**
     * Номера, на которые нельзя отправлять СМС
     */
    private String[] prohibitedCodes = {"101", "102", "103", "104", "105", "106", "107", "108", "109",
            "01", "02", "03", "04", "05", "06", "07", "08", "09"};

    private String prohibited = "На этот номер нельзя отправлять СМС!";
    private String badInput = "Не заполнены все поля!";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textInputSum = (EditText) findViewById(R.id.textInputSum);
        textInputNumber = (EditText) findViewById(R.id.textInputNumber);
    }

    @Override
    public void onClick(View v) {
        // с помощью Intent открываем Contacts Activity
        Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
        startActivityForResult(intent, PICK_CONTACT);
    }

    /**
     * C таблицы контактов получаем ID, с помощью которого получаем номер телефона в другой таблице
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            switch (requestCode) {
                case (PICK_CONTACT):
                    String id = getContactID(data);
                    String phoneNumb = getPhoneNumber(id);
                    if (phoneNumb == null) {
                        Toast.makeText(getApplicationContext(), "Нельзя взять номер данного контакта", Toast.LENGTH_LONG).show();
                    } else {
                        String withoutSpaces = removeSpaces(phoneNumb);

                        if (prohibitedCodes(withoutSpaces)) {
                            textInputNumber.setText(withoutSpaces);
                        } else {
                            Toast.makeText(getApplicationContext(), prohibited, Toast.LENGTH_LONG).show();
                        }
                    }
                    break;
            }
        } else {
            Toast.makeText(getApplicationContext(), "Вы не выбрали контакт", Toast.LENGTH_LONG).show();
        }
    }

    /**
     * Получаем ID контакта
     */
    private String getContactID(Intent data) {
        Uri contactData = data.getData();
        Cursor contactCursor = getContentResolver().query(contactData,
                new String[]{ContactsContract.Contacts._ID},
                null,
                null,
                null);
        String id = null;
        if (contactCursor.moveToFirst()) {
            id = contactCursor.getString(contactCursor
                    .getColumnIndex(ContactsContract.Contacts._ID));
        }

        contactCursor.close();
        return id;
    }

    /**
     * Получаем номер контакта по ID
     */
    private String getPhoneNumber(String id) {
        String phoneNumber = null;
        Cursor phoneCursor = getContentResolver().query(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER},
                ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "= ? ",
                new String[]{id},
                null);
        if (phoneCursor.moveToFirst()) {
            phoneNumber = phoneCursor
                    .getString(phoneCursor
                            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        }
        phoneCursor.close();
        return phoneNumber;
    }

    /**
     * Удаляем все пробелы из номера телефона
     */
    private String removeSpaces(String input) {
        return input.replaceAll(" ", "");
    }

    private boolean prohibitedCodes(String phoneNumber) {
        for (String deprecatedCode : prohibitedCodes) {
            if (phoneNumber.equals(deprecatedCode)) {
                return false;
            }
        }
        return true;
    }

    /**
     * Отсылаем сформированное СМС
     */
    public void sendSMS(View v) {
        Toast.makeText(getApplicationContext(), refillAccount(), Toast.LENGTH_LONG).show();
    }

    /**
     * Формируем СМС для пополнения чужого
     * телефона на основании введенных в поля данных
     */
    @Override
    public String refillAccount() {
        StringBuilder sb = new StringBuilder();
        String sum = textInputSum.getText().toString();
        String number = textInputNumber.getText().toString();
        if (sum.equals("") || (number.equals(""))) {
            Toast.makeText(getApplicationContext(), badInput, Toast.LENGTH_LONG).show();
        } else {
            sb.append(PRIVATBANK_PAY)
                    .append(sum)
                    .append("+")
                    .append("1234")
                    .append("+")
                    .append(number);
        }
        return sb.toString();
    }

    @Override
    public String getBalance() {
        return null;
    }

}